package com.redpack.redpost.struts.action.admin;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.redpack.redpost.struts.form.admin.*;
import com.redpack.redpost.util.dao.*;
import com.redpack.redpost.util.to.*;
//import com.redpack.redpost.util.ws.wsRedPost;

import com.redpack.ws.RedpackWSPortTypeProxy;


//import com.redpack.redpost.util.ws.*;


public class EditarArribo extends Action{
	public ActionForward execute(
			ActionMapping mapping, 
			ActionForm form, 
			HttpServletRequest request, 
			HttpServletResponse response) throws Exception {
		
		
		boolean logginVal = generalUtil.isLoggedInAdmin(request);
		if(logginVal!=true){
			return mapping.findForward("noLogin") ;
		}
		
		AgregarArriboForm f = (AgregarArriboForm)form;
		boolean val = false;
		
		
		//boolean wsPredocumentar = false;
		//wsPredocumentar = wsRedPost.ConsumirPredocumentar();
		
		
		if( f != null ){
			if( f.getAcc().equals("2") ){
				//Eliminar Arribo
				ArriboAdminDao.delArribo(f.getCve_arribo());
				
			}
			
			if( f.getAcc().equals("1") ){
				

				///////////////////////////////////////
				//Solo si es Devolucion
				//Obtener Formulario
				/////////////////////////////////////
				ArriboAdmin _ArriboAdmin = new ArriboAdmin();
				_ArriboAdmin = ArriboAdminDao.getArribo(f.getCve_arribo());
	
				if(_ArriboAdmin != null){
					
					if(_ArriboAdmin.getHd_aplica_devolucion() == 1){
						
						request.setAttribute("hd_aplica_devolucion", ""+1);
						request.setAttribute("cve_tipo", ""+ _ArriboAdmin.getCve_tipo());
						
						TarifaServicioTo  _TarifaServicio = new TarifaServicioTo();
						_TarifaServicio = TarifaAdminDao.getTarifaServicio(_ArriboAdmin.getServicio());
						
						List _EstatusArribo = new ArrayList(); 
						_EstatusArribo = EstatusArriboDao.getEstatusArribo();
						
						DireccionUsuarioTo _DireccionUsuario = new DireccionUsuarioTo();
						
						
						
						//Obtener Direccion Arribo/Usuario
						_DireccionUsuario = DireccionUsuarioAdminDao.getDireccionUsuarioArribo(_ArriboAdmin.getNip(), _ArriboAdmin.getCve_arribo());
						
						if(_DireccionUsuario != null)
						{
							request.setAttribute("nom_usuario", ""+ _DireccionUsuario.getNombre());
							request.setAttribute("apellidos_usuario", ""+ _DireccionUsuario.getApellidos());
							request.setAttribute("princp_estado", ""+ _DireccionUsuario.getEstado());
							request.setAttribute("princp_ciudad", ""+ _DireccionUsuario.getCiudad());
							request.setAttribute("princp_delegacion", ""+ _DireccionUsuario.getDelegacion());
							request.setAttribute("princp_calle", ""+ _DireccionUsuario.getCalle());
							
							request.setAttribute("princp_colonia", ""+ _DireccionUsuario.getColonia());
							request.setAttribute("princp_cp", ""+ _DireccionUsuario.getCp());

							request.setAttribute("princp_num_interior", ""+ _DireccionUsuario.getNum_int() );
							request.setAttribute("princp_num_exterior", ""+ _DireccionUsuario.getNum_ext());
							
							request.setAttribute("hd_activo_corresp", ""+_DireccionUsuario.getActivo_correspondencia());
							request.setAttribute("hd_activo_seguro", ""+  _DireccionUsuario.getActivo_seguro());
							
							request.setAttribute("hd_cont_direccion_alterna", ""+ 0);
							request.setAttribute("email", ""+ _DireccionUsuario.getEmail());
							
								if(_DireccionUsuario.getActivo_correspondencia() > 0)
								{
									request.setAttribute("servicio_corresp", ""+ "Activo");
								}
								else{
									request.setAttribute("servicio_corresp", ""+ "Desactivado");
								}
								
								if(_DireccionUsuario.getActivo_seguro() > 0)
								{
									request.setAttribute("servicio_seg_opc", ""+ "Activado");
								}
								else{
									request.setAttribute("servicio_seg_opc", ""+ "Desactivado");
								}
								
								if(_DireccionUsuario.getActivo_forma_pago() > 0){
									request.setAttribute("forma_pago_texto", ""+ "Forma de Pago: "+_DireccionUsuario.getForma_pago());
									request.setAttribute("activo_forma_pago", ""+ _DireccionUsuario.getActivo_forma_pago());
									
								}
								else{
									request.setAttribute("forma_pago_texto", ""+ "El Usuario no ha seleccionado una forma de pago");
									request.setAttribute("activo_forma_pago", ""+ 0);
								}
								
						}
						
					
						
						
						//Enviar Valores de Formulario	
						request.setAttribute("cve_tipo", ""+ _ArriboAdmin.getCve_tipo());
						request.setAttribute("hd_cve_arribo", ""+_ArriboAdmin.getCve_arribo());
						request.setAttribute("cve_arribo", ""+_ArriboAdmin.getCve_arribo());
						request.setAttribute("nip", ""+_ArriboAdmin.getNip());
						request.setAttribute("cve_guia_arribo", ""+_ArriboAdmin.getCve_guia_arribo());
						request.setAttribute("desc_mercancia", ""+_ArriboAdmin.getDesc_mercancia());
						request.setAttribute("cve_mercancia", ""+_ArriboAdmin.getCve_mercanciaArribo());
						request.setAttribute("num_paquetes", ""+_ArriboAdmin.getNum_paquetes());  
						
						request.setAttribute("comentario_status", ""+_ArriboAdmin.getComentario_status());
						
						
						
						request.setAttribute("hd_almacenaje_dias", ""+_ArriboAdmin.getAlmacenaje());
						request.setAttribute("hd_status_actual", ""+_ArriboAdmin.getStatus());
						
						
						request.setAttribute("cve_ImporteEspecial", ""+_ArriboAdmin.getCve_ImporteEspecial());
						request.setAttribute("hd_ImporteEspecial", ""+_ArriboAdmin.getHd_ImporteEspecial());
						request.setAttribute("hd_tipo_conversion_selec", ""+_ArriboAdmin.getHd_tipo_conversion_selec());

						request.setAttribute("hd_aplica_devolucion", ""+_ArriboAdmin.getHd_aplica_devolucion());
						request.setAttribute("tarifa_devolucion", ""+_ArriboAdmin.getHd_TarifaDevolucion());
						request.setAttribute("flete_devolucion", ""+_ArriboAdmin.getFlete_devolucion());
						request.setAttribute("ImporteDevolucionTotal", ""+_ArriboAdmin.getHd_ImporteDevolucionTotal());
						
						
						request.setAttribute("hd_ImporteDevolucionTotal", ""+_ArriboAdmin.getHd_ImporteDevolucionTotal());
						
						if(!_EstatusArribo.isEmpty())
						{
							request.setAttribute("EstatusArribo", _EstatusArribo);
						}
					
						if(_TarifaServicio != null)
						{
							
							//request.setAttribute("hd_cve_servicio", ""+_TarifaServicio.getCve_servicio());
							//request.setAttribute("cve_servicio", ""+_TarifaServicio.getCve_servicio());
							request.setAttribute("ManejoREDPOST", ""+_TarifaServicio.getManejoREDPOST());
							request.setAttribute("servicio_entrega", ""+_TarifaServicio.getServicio_entrega());
							request.setAttribute("sobre_peso_kilo", ""+_TarifaServicio.getSobre_peso_kilo());
							request.setAttribute("seguro_opcional_transporte_porcent", ""+_TarifaServicio.getSeguro_opcional_transporte_porcent());
							request.setAttribute("almacenaje_costo", ""+_TarifaServicio.getAlmacenaje_costo());
							request.setAttribute("almacenaje_dias", ""+_TarifaServicio.getAlmacenaje_dias());
							request.setAttribute("devoluciones_costo", ""+_TarifaServicio.getDevoluciones_costo());
							
							request.setAttribute("abono", ""+_TarifaServicio.getAbono());
							request.setAttribute("concentrado_mensual_corresp", ""+_TarifaServicio.getConcentrado_mensual_corresp());
							request.setAttribute("cargos_adicionales", ""+_TarifaServicio.getCargos_adicionales());
							request.setAttribute("otros_cargos", ""+_TarifaServicio.getOtros_cargos());
							request.setAttribute("peso_amparado", ""+_TarifaServicio.getPeso_amparado());
						}
						
						return mapping.findForward("edit") ;
					}

					
				}
				
				
				///////////////////////////////////////
				//Mostrar Arribos
				//Obtener Formulario /Arribo
				/////////////////////////////////////
				if(_ArriboAdmin != null)
				{
					//Obtener Tarifas/Mercancias
					List MercanciaImporte = MercanciaImporteDao.getMercancias();
					TarifaServicioTo  _TarifaServicio = new TarifaServicioTo();
					//_TarifaServicio = TarifaAdminDao.getTarifaServicio(_ArriboAdmin.getServicio());
					
					//Solo para Correspondencia
					if(_ArriboAdmin.getCve_tipo() == 3){
						_TarifaServicio = TarifaAdminDao.getTarifaServicio(_ArriboAdmin.getCve_tipo());
					}
					else{
						//Express y Ecoexpress
						_TarifaServicio = TarifaAdminDao.getTarifaServicio(_ArriboAdmin.getServicio());
					}
					
					
					List _EstatusArribo = new ArrayList(); 
					_EstatusArribo = EstatusArriboDao.getEstatusArribo();
					  
					DireccionUsuarioTo _DireccionUsuario = new DireccionUsuarioTo();
					
					
					//Obtener Direccion Arribo/Usuario
					_DireccionUsuario = DireccionUsuarioAdminDao.getDireccionUsuarioArribo(_ArriboAdmin.getNip(), _ArriboAdmin.getCve_arribo());
					
					if(_DireccionUsuario != null)
					{
						request.setAttribute("nom_usuario", ""+ _DireccionUsuario.getNombre());
						request.setAttribute("apellidos_usuario", ""+ _DireccionUsuario.getApellidos());
						request.setAttribute("princp_estado", ""+ _DireccionUsuario.getEstado());
						request.setAttribute("princp_ciudad", ""+ _DireccionUsuario.getCiudad());
						request.setAttribute("princp_delegacion", ""+ _DireccionUsuario.getDelegacion());
						request.setAttribute("princp_calle", ""+ _DireccionUsuario.getCalle());
						
						request.setAttribute("princp_colonia", ""+ _DireccionUsuario.getColonia());
						request.setAttribute("princp_cp", ""+ _DireccionUsuario.getCp());

						request.setAttribute("princp_num_interior", ""+ _DireccionUsuario.getNum_int() );
						request.setAttribute("princp_num_exterior", ""+ _DireccionUsuario.getNum_ext());
						
						request.setAttribute("hd_activo_corresp", ""+_DireccionUsuario.getActivo_correspondencia());
						request.setAttribute("hd_activo_seguro", ""+  _DireccionUsuario.getActivo_seguro());
						
						request.setAttribute("hd_cont_direccion_alterna", ""+ 0);
						request.setAttribute("email", ""+ _DireccionUsuario.getEmail());
						
							if(_DireccionUsuario.getActivo_correspondencia() > 0)
							{
								request.setAttribute("servicio_corresp", ""+ "Activo");
							}
							else{
								request.setAttribute("servicio_corresp", ""+ "Desactivado");
							}
							
							if(_DireccionUsuario.getActivo_seguro() > 0)
							{
								request.setAttribute("servicio_seg_opc", ""+ "Activado");
							}
							else{
								request.setAttribute("servicio_seg_opc", ""+ "Desactivado");
							}
							
							if(_DireccionUsuario.getActivo_forma_pago() > 0){
								request.setAttribute("forma_pago_texto", ""+ "Forma de Pago: "+_DireccionUsuario.getForma_pago());
								request.setAttribute("activo_forma_pago", ""+ _DireccionUsuario.getActivo_forma_pago());
								
							}
							else{
								request.setAttribute("forma_pago_texto", ""+ "El Usuario no ha seleccionado una forma de pago");
								request.setAttribute("activo_forma_pago", ""+ 0);
							}
							
					}
					
					
					//Enviar Valores de Formulario	
					request.setAttribute("cve_tipo", ""+ _ArriboAdmin.getCve_tipo());
					request.setAttribute("servicio", ""+ _ArriboAdmin.getServicio());
					request.setAttribute("cve_guia_redpack", ""+ _ArriboAdmin.getCve_guia_redpack());
					
					
					request.setAttribute("hd_cve_arribo", ""+_ArriboAdmin.getCve_arribo());
					request.setAttribute("cve_arribo", ""+_ArriboAdmin.getCve_arribo());
					request.setAttribute("nip", ""+_ArriboAdmin.getNip());
					request.setAttribute("cve_guia_arribo", ""+_ArriboAdmin.getCve_guia_arribo());
					request.setAttribute("desc_mercancia", ""+_ArriboAdmin.getDesc_mercancia());
					request.setAttribute("cve_mercancia", ""+_ArriboAdmin.getCve_mercanciaArribo());
					request.setAttribute("num_paquetes", ""+_ArriboAdmin.getNum_paquetes());
					request.setAttribute("valor_usd", ""+_ArriboAdmin.getValor_mercancia());  
					
					request.setAttribute("comentario_status", ""+_ArriboAdmin.getComentario_status());
					
					
					request.setAttribute("hd_almacenaje_dias", ""+_ArriboAdmin.getAlmacenaje());
					request.setAttribute("hd_status_actual", ""+_ArriboAdmin.getStatus());
			
					
					request.setAttribute("cve_ImporteEspecial", ""+_ArriboAdmin.getCve_ImporteEspecial());
					request.setAttribute("hd_ImporteEspecial", ""+_ArriboAdmin.getHd_ImporteEspecial());
					request.setAttribute("hd_tipo_conversion_selec", ""+_ArriboAdmin.getHd_tipo_conversion_selec());

					request.setAttribute("hd_aplica_devolucion", ""+_ArriboAdmin.getHd_aplica_devolucion());
					request.setAttribute("tarifa_devolucion", ""+_ArriboAdmin.getTarifa_devolucion());
					request.setAttribute("flete_devolucion", ""+_ArriboAdmin.getFlete_devolucion());
					request.setAttribute("ImporteDevolucionTotal", ""+_ArriboAdmin.getImporteDevolucionTotal());
					

					if(_ArriboAdmin.getServicio() == 1)
					{
						request.setAttribute("servicio_texto", ""+ "SERVICIO ECOEXPRESS");
					}
					if(_ArriboAdmin.getServicio() == 2)
					{
						request.setAttribute("servicio_texto", ""+ "SERVICIO EXPRESS");
					}
					if(_ArriboAdmin.getCve_tipo() == 3)
					{
						//_rev
						request.setAttribute("servicio_texto", ""+ "SERVICIO CORRESPONDENCIA");
						request.setAttribute("cve_tipo", ""+_ArriboAdmin.getCve_tipo());
					}
				

					
					
					if(_TarifaServicio != null)
					{
						
						//request.setAttribute("hd_cve_servicio", ""+_TarifaServicio.getCve_servicio());
						//request.setAttribute("cve_servicio", ""+_TarifaServicio.getCve_servicio());
						request.setAttribute("ManejoREDPOST", ""+_TarifaServicio.getManejoREDPOST());
						request.setAttribute("servicio_entrega", ""+_TarifaServicio.getServicio_entrega());
						request.setAttribute("sobre_peso_kilo", ""+_TarifaServicio.getSobre_peso_kilo());
						request.setAttribute("seguro_opcional_transporte_porcent", ""+_TarifaServicio.getSeguro_opcional_transporte_porcent());
						request.setAttribute("almacenaje_costo", ""+_TarifaServicio.getAlmacenaje_costo());
						request.setAttribute("almacenaje_dias", ""+_TarifaServicio.getAlmacenaje_dias());
						request.setAttribute("devoluciones_costo", ""+_TarifaServicio.getDevoluciones_costo());
						
						request.setAttribute("abono", ""+_TarifaServicio.getAbono());
						request.setAttribute("concentrado_mensual_corresp", ""+_TarifaServicio.getConcentrado_mensual_corresp());
						request.setAttribute("cargos_adicionales", ""+_TarifaServicio.getCargos_adicionales());
						request.setAttribute("otros_cargos", ""+_TarifaServicio.getOtros_cargos());
						
						request.setAttribute("peso_amparado", ""+_TarifaServicio.getPeso_amparado());
						
					}
					
					if(!_EstatusArribo.isEmpty())
					{
						request.setAttribute("EstatusArribo", _EstatusArribo);
					}

					if(!MercanciaImporte.isEmpty())
					{
						//Recuperar Umbrales, por Tipo de Mercancia
						request.setAttribute("merc_impor", MercanciaImporte);
						
						java.util.Iterator iter2 = MercanciaImporte.iterator();
		  		        while (iter2.hasNext()) {
		  		        	MercanciaImporteTo _item = (MercanciaImporteTo) iter2.next();
 
		  		        	if(_item.getCve_mercancia() == _ArriboAdmin.getCve_mercanciaArribo()){
		  		        		
			  		        	request.setAttribute("limite_inferior", ""+_item.getLimite_inferior());
			  		        	request.setAttribute("limite_superior",""+ _item.getLimite_superior());
			  		        	request.setAttribute("porcentaje_impuesto_import", ""+_item.getPorcentaje_impuesto_import());
		  		        	}
		  		        }
					}
					
					/////////////////////////////////////
					//Seccion Puntos Recompensa
					///////////////////////////////////////
					/*
					25	$14
					50	$28
					100	$80
					125	$100
					150	$125
					200	$150
					250	$200
					300	$250
					350	$300
					400	$350
					450	$400
					*/
					int puntosUsuario = 0;
					int puntosAplican = 0;
					int restanPuntos = 0;
					float montoAplica = 0;
					
					
					//request.setAttribute("aplicar_puntos_rec", ""+_ArriboAdmin.getAplicar_puntos_rec());
					request.setAttribute("hd_aplica_puntos_recompensa", ""+_ArriboAdmin.getAplicar_puntos_rec());
					
					//Aplicar Puntos = 1
					if(_ArriboAdmin.getAplicar_puntos_rec() == 1){
						
						//Obtener Puntos Recompensa
						puntosUsuario = PuntosRecompensaDao.getPuntosPorUsuario(_ArriboAdmin.getNip());
						
						if(puntosUsuario > 0 && puntosUsuario >= 25){
							
							
							//Rangos de Puntos
							if(puntosUsuario > 25 && puntosUsuario < 50){
								
								puntosAplican = 25;
								montoAplica = 14;
								restanPuntos = puntosUsuario - 25;
								
							}
							if(puntosUsuario >= 50 && puntosUsuario < 100){
								
								puntosAplican = 50;
								montoAplica = 28;
								restanPuntos = puntosUsuario - 50;
								
							}
							if(puntosUsuario >= 100 && puntosUsuario < 125){
								
								puntosAplican = 100;
								montoAplica = 80;
								restanPuntos = puntosUsuario - 100;
								
							}
							if(puntosUsuario >= 125 && puntosUsuario < 150){
								
								puntosAplican = 125;
								montoAplica = 100;
								restanPuntos = puntosUsuario - 125;
								
							}
							if(puntosUsuario >= 150 && puntosUsuario < 200){
								
								puntosAplican = 150;
								montoAplica = 125;
								restanPuntos = puntosUsuario - 150;
													
							}
							if(puntosUsuario >= 200 && puntosUsuario < 250){
								
								puntosAplican = 200;
								montoAplica = 150;
								restanPuntos = puntosUsuario - 200;
								
							}
							if(puntosUsuario >= 250 && puntosUsuario < 300){
								
								puntosAplican = 250;
								montoAplica = 200;
								restanPuntos = puntosUsuario - 250;
								
							}
							if(puntosUsuario >= 300 && puntosUsuario < 350){
								
								puntosAplican = 300;
								montoAplica = 250;
								restanPuntos = puntosUsuario - 300;
								
							}
							if(puntosUsuario >= 350 && puntosUsuario < 400){
								
								puntosAplican = 350;
								montoAplica = 300;
								restanPuntos = puntosUsuario - 350;
							}
							if(puntosUsuario >= 400 && puntosUsuario < 450){
								
								puntosAplican = 400;
								montoAplica = 350;
								restanPuntos = puntosUsuario - 400;
							}
		
							if(puntosUsuario >= 450){
								
								puntosAplican = 450;
								montoAplica = 400;
								restanPuntos = puntosUsuario - 450;
							}
						
							request.setAttribute("hd_puntos_usuario", ""+ puntosUsuario);
							request.setAttribute("hd_puntos_aplican", ""+ puntosAplican);
							request.setAttribute("hd_puntos_restan", ""+ restanPuntos);
							request.setAttribute("hd_puntos_monto_aplica", ""+ montoAplica);

						}
					
					}
					
					//Obtener Puntos Aplicados
					//Los puntos fueron Aplicados = 2
					if(_ArriboAdmin.getAplicar_puntos_rec() == 2){
						
						//Obtener Nota de Credito, Aplico Puntos
						NotaCreditoArriboTo _NotaCredito = new NotaCreditoArriboTo();
						_NotaCredito = PuntosRecompensaDao.getNotaCredito(_ArriboAdmin.getCve_arribo());
						
						request.setAttribute("hd_nota_cred_envio", ""+ _NotaCredito.getEnvio());
						request.setAttribute("hd_nota_cred_descuento", ""+ _NotaCredito.getDescuento());
						request.setAttribute("hd_nota_cred_importe_aplicado", ""+ _NotaCredito.getImporte_aplicado());
						request.setAttribute("hd_aplica_puntos_recompensa", ""+2);
						request.setAttribute("hd_puntos_aplican", ""+ _NotaCredito.getPuntos_aplicados());

					}
					
				}
				else
				{
					request.setAttribute("errorObtenerArribio", ""+val);
				}
				
				return mapping.findForward("edit") ;
				
				
				
			}
		}

			List arribos = ArriboAdminDao.getArribos();
			request.setAttribute("arribos", arribos);
			return mapping.findForward("success") ;

	}
}







